package com.cskaoyan.javase.network._1udp._v4;

import com.cskaoyan.javase.network.util.UDPNetworkUtils;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.util.Scanner;

/**
 *
 * 使用多线程改进聊天的程序，首先程序就不能再分发送端和接收端了，可以直接将两个进程想象成两个人：
 * 长风和他的女神在聊天。
 *
 * 在这样的一个场景下，如何使用多线程解决单线程环境下导致的程序阻塞呢？
 * 只需要：
 * 长风起两个线程，一个线程负责进行键盘录入执行发送消息的任务，另一个线程负责执行接收女神发送的消息的任务。
 * 女神也起两个线程，一个线程负责进行键盘录入执行发送消息的任务，另一个线程负责执行接收长风发送的消息的任务。
 *
 * 多线程环境下需要新建两个任务:
 *      1.发送消息的任务
 *      2.接收消息的任务
 *
 * 不管是发送消息的任务,还是接收消息的任务
 * 它们都需要使用DatagramSocket对象
 * 而且为了保证接收和发送能够一一对应,还需要保证端口号要对应的上
 *
 * @since 11:44
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class LongWind {
    public static void main(String[] args) throws IOException {
        // 这个socket既作为发送端,也作为接收端
        DatagramSocket socket = new DatagramSocket(7777);

        // 启动两个线程,分别执行接收消息和发送消息的任务
        new Thread(new SendMsgTask(socket, "127.0.0.1", 6666)).start();
        new Thread(new ReceiveMsgTask(socket)).start();
    }
}
